////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  tmc_1_0_0.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef TMC_1_0_0_H
#define TMC_1_0_0_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "ispglobalelements.h"

#define TMC_1_0_0_NAMESPACE_BEGIN namespace tmc_1_0_0 {
#define TMC_1_0_0_NAMESPACE_END }

TMC_1_0_0_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// tmc10_rgn_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct tmc10_rgn_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gtm_percentage
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Percentage of current DRC gain to be applied to GTM
    /// Default Value: 0.5
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         sum of all percentages should be 1
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT gtm_percentage;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ltm_percentage
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Percentage of current DRC gain to be applied to LTM
    /// Default Value: 0.5
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         sum of all percentages should be 1
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT ltm_percentage;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// la_percentage
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Percentage of current DRC gain to be applied to LA
    /// Default Value: 0
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         sum of all percentages should be 1
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT la_percentage;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gamma_percentage
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Percentage of current DRC gain to be applied to GAMMA
    /// Default Value: 0
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         sum of all percentages should be 1
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT gamma_percentage;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// knee_out_mid
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   mid-tone to be recovered from under-exposure image
    /// Default Value: 0.2
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         more knee_out_mid for brighter image
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT knee_out_mid;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_boost_ratio
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Percentage of dark-boosting gain to be applied
    /// Default Value: 0.0
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         more dark_boost_ratio for brighter image
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT dark_boost_ratio;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// core_rsv_para1
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT core_rsv_para1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// core_rsv_para2
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT core_rsv_para2;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// core_rsv_para3
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT core_rsv_para3;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// core_rsv_para4
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT core_rsv_para4;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// core_rsv_para5
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT core_rsv_para5;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_tmc10_aec_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_tmc10_aec_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// aec_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    globalelements::trigger_pt_type_aec aec_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// tmc10_rgn_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    tmc10_rgn_dataType  tmc10_rgn_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_tmc10_coreType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_tmc10_coreType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mod_tmc10_aec_data - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                  mod_tmc10_aec_dataCount;
    UINT32                  mod_tmc10_aec_dataID;
    mod_tmc10_aec_dataType* mod_tmc10_aec_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_tmc10_reserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_tmc10_reserveType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// use_gtm
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   use gtm to compensate DRC gain
    /// Default Value: 1
    /// Range:         [0, 1]
    /// Bit Depth:     1u
    /// Conversion:    No Conversion needed
    /// Notes:         This is only applicable if chipset has GTM module support
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 use_gtm;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// use_ltm
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   use ltm to compensate DRC gain
    /// Default Value: 1
    /// Range:         [0, 1]
    /// Bit Depth:     1u
    /// Conversion:    No Conversion needed
    /// Notes:         This is only applicable if chipset has LTM module support
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 use_ltm;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// use_la
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   use la to compensate DRC gain
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     1u
    /// Conversion:    No Conversion needed
    /// Notes:         This is only applicable if chipset has LA module support
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 use_la;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// use_gamma
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   use gamma to compensate DRC gain
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     1u
    /// Conversion:    No Conversion needed
    /// Notes:         This is only applicable if chipset has GAMMA module support
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 use_gamma;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// reserve_rsv_para1
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT  reserve_rsv_para1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// reserve_rsv_para2
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT  reserve_rsv_para2;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// reserve_rsv_para3
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT  reserve_rsv_para3;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// reserve_rsv_para4
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT  reserve_rsv_para4;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// reserve_rsv_para5
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   none
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT  reserve_rsv_para5;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_tmc10Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_tmc10Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable_section
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct enable_sectionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        globalelements::enable_flag_type adrc_isp_enable;
    } enable_section;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// control_variables
    ///
    /// Default Value: control_gain
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct control_variablesStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// control_var_type
        /// Default Value: control_gain
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        enum class control_var_typeEnum
        {
            control_lux_idx = 0,
            control_gain    = 1
        } control_var_type;
    } control_variables;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// control_method
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct control_methodStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// aec_exp_control
        /// Default Value: control_gain
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ispglobalelements::tuning_control_aec_type aec_exp_control;
    } control_method;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_tmc10_reserve
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_tmc10_reserveType chromatix_tmc10_reserve;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_tmc10_core
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_tmc10_coreType    chromatix_tmc10_core;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_tmc10TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatix_tmc10TypeClass : public ParameterModule, public chromatix_tmc10Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_tmc10TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_tmc10TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatix_tmc10TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load tmc10_rgn_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadtmc10_rgn_dataType(
        ParameterFileSymbolTableEntry* entry,
        tmc10_rgn_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_tmc10_aec_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_tmc10_aec_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_tmc10_aec_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_tmc10_coreType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_tmc10_coreType(
        ParameterFileSymbolTableEntry* entry,
        chromatix_tmc10_coreType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_tmc10_reserveType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_tmc10_reserveType(
        ParameterFileSymbolTableEntry* entry,
        chromatix_tmc10_reserveType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_tmc10Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_tmc10Type(
        ParameterFileSymbolTableEntry* entry,
        chromatix_tmc10Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load enable_sectionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadenable_sectionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_tmc10Type::enable_sectionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_tmc10Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load control_variablesStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadcontrol_variablesStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_tmc10Type::control_variablesStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load control_methodStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadcontrol_methodStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_tmc10Type::control_methodStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatix_tmc10_coreType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadchromatix_tmc10_coreType(
        chromatix_tmc10_coreType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatix_tmc10Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadchromatix_tmc10Type(
        chromatix_tmc10Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatix_tmc10TypeClass

TMC_1_0_0_NAMESPACE_END
#endif // TMC_1_0_0_H

